Add Player vs Bot mode with editable tier names #10
+1,724
−68
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Adds a full Player vs Bot mode that reuses the existing split screen Player vs Player layout, plus a polish pass so bot tier names are editable data and both synthwave floors react to the song.
What players get
File guide
Bot core
Assets/Bot/BotDifficulty.cs: enum tiers (Easy / Medium / Hard / Perfect). Enum names stay stable for serialization; display names live on the config.Assets/Bot/BotDifficultySettings.cs: per tier display name, error rate, and decision delay range.Assets/Bot/BotDifficultyDefaults.cs: seed and fallback values plus default labels (Rookie / Rival / Ace / Flawless).Assets/Bot/BotDifficultyConfig.cs: ScriptableObject table. Gameplay calls GetSettings; UI calls GetDisplayName.Assets/Bot/BotPlayerController.cs: decision loop. One roll per tree step, wait for delay and a hittable note, then submit through the same path as a human.Assets/Bot/Editor/BotSetupEditorTools.cs: Rhythm menu item to create the config and wire it onto the coordinator and title screen.Assets/Bot/Editor/BotDecisionSimulationTests.cs: editor sim for error rate sanity checks.Assets/ScriptableObjects/Configs/BotDifficultyConfig.asset: shipped default rates and labels.Session and integration
Assets/Session/GameMode.cs: adds PlayerVsBot.Assets/Session/GameSession.cs: stores SelectedGameMode, SelectedBotDifficulty, and SelectedBotLabel across scenes.Assets/Integration/TreeRhythmController.cs: bot API (OnBotDecisionPoint, GetRequiredAction, HasHittableRhythmNote, SubmitGameplayActionAsync) plus SongAudioSource for shared audio systems.Assets/Integration/TwoPlayerGameCoordinator.cs: enables the bot, disables P2 human input, labels results, duplicates P2 synthwave, and wires P1 FFT and beat pulse so the player side background reacts too.Assets/Scripts/AudioFFTAnalyzer.cs: SetSource so analysis can follow P1's playing clip (P2 PlaySync never starts audio).Assets/Rhythm/Core/RhythmManager.cs: HasHittableNote for bot timing.Assets/Tree/Navigation/TreeNavigator.cs: exposes GetRequiredAction for the bot.Menu and UI
Assets/Menu/TitleScreen/TitleScreenController.cs: VS Bot node and difficulty sub tree with labels from the config.Assets/Menu/SongSelect/*: hide P2 difficulty row in bot mode; transition screen uses SelectedBotLabel.Assets/Menu/MenuSceneController.cs: StartTutorial stub hook kept from the original bot commit for the Tutorial? yes path.Assets/UI/Style1/ResultScreenController.cs: identity label support for Bot display name.Assets/Scenes/GameScene.unity: coordinator bot config wiring.Docs
AI/components/PlayerVsBot.md: component doc and file map.AI/CHANGELOG.md,AI/COMPONENT_INDEX.md,AI/INDEX.md, TitleScreen / MainMenu doc updates.Test plan